不要再写循环了!mybatis批量插入数据,批量更新集合list它不香吗?

您所在的位置:网站首页 遍历list map 不要再写循环了!mybatis批量插入数据,批量更新集合list它不香吗?

不要再写循环了!mybatis批量插入数据,批量更新集合list它不香吗?

2024-06-13 01:30| 来源: 网络整理| 查看: 265

首先,mybatis框架就是对sql语句进行了封装,用xml的方式,通过标签和属性解析执行sql语句,我们知道,在表中插入记录的sql语句为:

INSERT INTO 表名称 (列1, 列2,…) VALUES (值1, 值2,…)

在插入过程中,数据库会默认加上事务,也就是说批量插入是具有原子性的。有批量插入,但却没有支持批量更新的sql语句,仅有对一条满足条件的记录进行更新:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

在mysql中,我们可以用replace into关键字达到批量更新的效果,其原理是删除原有的一条记录(如有), 并且插入一条新的记录来替换原记录,其常用语法如下:

REPLACE INTO 表名称 (列1, 列2,…) VALUES (值1,值2),(值3,值4),…(值x,值y)

需要注意的是,插入数据的表必须有主键或者是唯一索引,不然replace into 会直接插入数据,这将导致表中出现重复的数据,这很好理解,因为其本质上是insert into的“升级”。

知道了更新语句后,在mybatis中便有了两种简单方便的批量更新方法:

第一种:

xxxMapper.java

public interface xxxMapper { int updateBatch(@Param("list") List yourListName); }

xxxMapping.xml

update 表名 字段1 = #{item.字段1,jdbcType=INTEGER}, 字段2 = #{item.字段2,jdbcType=VARCHAR}, ...... where id = #{item.id,jdbcType=INTEGER}

第一种是用mybatis提供的foreach标签,循环执行update语句实现批量更新,在foreach标签中有几个属性,

item,index,collection,open,separator,close

在更新操作中,我们只需要关注collection属性和item属性即可,我们看一段mybatis源码:

private Object wrapCollection(Object object) { DefaultSqlSession.StrictMap map; // 如果传入参数是一个集合 if (object instanceof Collection) { //创建1个Map map = new DefaultSqlSession.StrictMap(); map.put("collection", object); //注意 如果参数是list if (object instanceof List) { //那么传来的参数,collection的默认写法collection="list" map.put("list", object); } return map; } else if (object != null && object.getClass().isArray()) { map = new DefaultSqlSession.StrictMap(); //数组的默认写法为collection="array" map.put("array", object); return map; } else { return object; } }

可以看出,当传入参数是集合时,collection的默认值是list,当传入参数是数组时,collection的默认值的array,如果是多个参数,那么就要封装一个key是参数名,value是参数对象的map了。所以,这里collection就用默认值list,在mapper中,用@param("list")注解传入参数即可。 item属性表示传入集合中每一个元素进行迭代时的别名,相当于sql中的别名。

需要注意的是,别忘了用别名 . 属性!否则会抛找不到字段异常!

第二种: replace into 表名 (id,字段2,字段3,字段4,...,字段N) VALUES (#{item.id}, #{item.字段2},#{item.字段3},#{item.字段4},...,#{item.字段N})

由于replace into是先删除再插入,相当于更新。因此需要注意表需有主键,且是自增的,否则将会直接批量插入,形成重复记录。

创作不易,如果有对你有帮助,点个赞呗~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3